LeetCode 179 Largest Number

题目描述

Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

Credits:

Special thanks to @ts for adding this problem and creating all test cases.

分析

[3, 30, 34, 5, 9]

排序成……

[9, 5, 34, 3, 30]

如何判断大小?对于每个元素,左边第一位大的在前面,如5>30。因为5的第一位是5是5,30的第一位是3。依次比较。

那么3应该比30大,因为3 + 30 = 330 ,而30 + 3 = 303。

所以本题可分为4步:

  1. 定义string数组,将int数组,转成string数组
  2. 对string数组按照定义的规则排序
  3. 如果strs第一个元素是“0”,则结果是0
  4. 连接strs数组成字符串,即为结果

代码

    public static String largestNumber(int[] nums) {

        String[] strs = new String[nums.length];

        // 将int数组,转成string数组
        for (int i = 0; i < strs.length; i++) {
            strs[i] = nums[i] + "";
        }

        // 对strs排序
        Arrays.sort(strs, new Comparator<String>() {

            public int compare(String x, String y) {
                return (y + x).compareTo(x + y);
            }
        });

        // 如果strs第一个元素是“0”,则结果是0
        if ("0".equals(strs[0])) {
            return "0";
        }

        // 连接strs数组成字符串
        return String.join("", strs);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值